//easyui工具
var Easyui = {
    editor: {
        // 同textbox
        text: {
            type: "textbox",
        },
        // 普通文本框列
        textbox: {
            type: "textbox",
        },
        textbox_noedit: {
            type: "textbox",
            options: {
                editable: false,
            },
        },
        // 整数列
        numberbox: {
            type: "numberbox",
        },
        numberbox_noedit: {
            type: "numberbox",
            options: {
                editable: false,
            },
        },
        numberbox1: {
            type: "numberbox",
            options: {
                precision: 1, //1位小数点
            },
        },
        // 2位小数列
        numberbox2: {
            type: "numberbox",
            options: {
                precision: 2, //2位小数点
            },
        },
        // 4位小数列
        numberbox4: {
            type: "numberbox",
            options: {
                precision: 4, //4位小数点
            },
        },
        // 5位小数列
        numberbox5: {
            type: "numberbox",
            options: {
                precision: 5, //5位小数点
            },
        },
        numberbox6: {
            type: "numberbox",
            options: {
                precision: 6, //6位小数点
            },
        },
        // 8位小数列
        numberbox9: {
            type: "numberbox",
            options: {
                precision: 9, //9位小数点
            },
        },
        // 复选框
        checkbox: {
            type: "checkbox",
            options: {
                on: "1",
                off: "0",
            },
        },
        // 下拉列表，使用new Combobox([{value:0,text"test1"},{value:1,text:"test2"}])创建
        // edit为false表示不可编辑
        Combobox: function (data, edit, onChange) {
            this.type = "combobox";
            this.options = {
                editable: defined(edit) ? edit : true,
                data: data,
                valueField: "value",
                textField: "text",
            };
            //添加onchange事件
            if (defined(onChange)) {
                this.options.onChange = onChange;
            }
        },
    },
    formatter: {
        // 复选框列显示文字
        checkbox: function (value) {
            return value == "1" ? "Y" : "N";
        },
        // 下拉列表列文字显示text而不是value
        combobox: function (value) {
            return Easyui.getComboboxValText(this.editor.options.data, value);
        },
    },
    //根据items和val获得对应的text，如果没找到就返回最后一个
    getComboboxValText: function (items, val) {
        for (let i in items) {
            if (items[i].value == val) {
                return items[i].text; //返回匹配的
            }
        }
        return items[items.length - 1].text; //返回最后一个
    },
};
//数据表格工具
var DatagridTool = {
    editIndex: undefined,
    editTable: undefined,
    //结束行编辑
    endEditing: function () {
        //判断行
        if (DatagridTool.editIndex == undefined) {
            return true;
        }
        //有效行
        if (
            $(DatagridTool.editTable).datagrid("validateRow", DatagridTool.editIndex)
        ) {
            //结束行编辑
            $(DatagridTool.editTable).datagrid("endEdit", DatagridTool.editIndex);
            DatagridTool.editIndex = undefined;
            return true;
        } else {
            return false;
        }
    },
    // 双击单元格事件
    onDblClickCell: function (index, field) {
        try {
            //双击一行(不是当前行)
            if (DatagridTool.editIndex != index) {
                //结束前面正在进行的行
                if (DatagridTool.endEditing()) {
                    //开始行编辑
                    $(this).datagrid("selectRow", index).datagrid("beginEdit", index);
                    //找到
                    var ed = $(this).datagrid("getEditor", {
                        index: index,
                        field: field,
                    });
                    if (ed) {
                        ($(ed.target).data("textbox") ?
                            $(ed.target).textbox("textbox") :
                            $(ed.target)
                        ).focus();
                    }
                    DatagridTool.editIndex = index;
                    DatagridTool.editTable = this;
                } else {
                    setTimeout(function () {
                        $(this).datagrid("selectRow", DatagridTool.editIndex);
                    }, 0);
                }
            } else {
                DatagridTool.endEditing();
            }
        } catch (error) {
            delete DatagridTool.editIndex;
            delete DatagridTool.editTable;
            //防止数据未加载完成产生点击事件产生的错误
            // console.log(error);
        }
    },
    //编辑完成事件
    onEndEdit: function (index, row) {
        let dgId = this.id;
        setTimeout(function () {
            //必须要延时，否则设置无效
            DatagridTool.addSetCmdTip(dgId);
        }, 0);
    },
    //id:设备id
    createHtml: function (datagrid) {
        var dg = $('<table id="{id}"></table>'.format(datagrid));
        var innerHtml = "<script>";
        //加载datagrid表格
        innerHtml += '$("#{id}").datagrid({data});'.format(datagrid);
        //加载表格默认数据
        innerHtml += '$("#{id}").datagrid("loadData",{rowData});'.format(datagrid);
        //为div添加title提示
        innerHtml +=
            '$("#{id}").datagrid("options").view.onAfterRender=DatagridTool.addSetCmdTip("{id}");'.format(
                datagrid
            );
        innerHtml += "</script>";
        dg.html(innerHtml);
        return dg.prop("outerHTML");
    },
    //获得选中行的显示值,dg=表格对象
    getSelectedRowViewText: function (dg) {
        let selectedRow = dg.datagrid("getSelected");
        if (selectedRow) {
            let rowIndex = selectedRow.index;
            let pageId = dg[0].id.split("_")[0];
            let dgData = eval(pageId + ".dgData");
            let EleCss = "#{0} #datagrid-row-r{1}-2-{} .datagrid-cell-c{1}".format(
                pageId,
                rowIndex
            ); //td的属性选择器
            //datagrid-row-r1-2-0,取出r1中的1（多个datagrid序号不同）
            var rNum = $("#" + pageId + " [id^=datagrid-row-]")[0]
                .id.split("-")[2]
                .replace("r", "");
            for (let col in columns) { }
        }
    },
    //为datagrid的div添加title提示; dgId:datagrid的id
    addSetCmdTip: function (dgId) {
        let dg = $("#" + dgId);
        let rows = dg.datagrid("getData").rows;
        let EleCss; //要更新的控件的css名称
        let pageId = dgId.split("_")[0];
        let columns = eval(pageId + ".dgData.columns");
        //datagrid-row-r1-2-0,取出r1中的1（多个datagrid序号不同）
        var rowNum = this.getTrIdRowNumber(dgId);
        for (let row in rows) {
            for (let col in columns) {
                //例如：#PageCs #datagrid-row-r1-2-0 .datagrid-cell-c1-cs
                EleCss = "#{0} #datagrid-row-r{1}-2-{2} .datagrid-cell-c{1}-{3}".format(
                    pageId,
                    rowNum,
                    row,
                    columns[col].field
                );
                if (defined(columns[col].cmdKey)) {
                    //添加cmdKey和title
                    // $(EleCss).attr("cmdKey",columns[col].cmdKey.replace("<n>",row));
                    $(EleCss)
                        .parent()
                        .attr("title", columns[col].cmdKey.replace("<n>", row));
                }
            }
        }
    },
    //获得行Id的头部部分(例如datagrid-row-r1-2-0中的r1中的1)
    getTrIdRowNumber: function (dgId) {
        let id = $("#{0} [id^=datagrid-row-r]".format(dgId.split("_")[0]))[0].id;
        return id.split("-")[2].replace("r", "");
    },
    //更新表格中的数据（从datagrid data-options:data中）
    //因为$("#PageCs_dg").datagrid("loadData",PageCs.dgData)不能使用所以添加的方法
    //  上面的方法更新数据后表格直接只有一条线了??没找到原因
    //调试 js:PageCs.dgData.rows[0].cs="10086";DatagridTool.UpdateData("PageCs_dg");
    updateData: function (dgId, notClearUpdated) {
        let dg = $("#" + dgId);
        // let rows = dg.datagrid("getData").rows;
        // let pageId = dgId.split('_')[0];
        // let EleCss;//要更新的控件的css名称
        // let rowNum = this.GetTrIdRowNumber(dgId);
        // for(let row in rows){
        //     for(let key in rows[row]){
        //         //例如：#PageCs #datagrid-row-r1-2-0 .datagrid-cell-c1-cs
        //         EleCss = ("#{0} #datagrid-row-r{3}-2-{1} .datagrid-cell-c{3}-{2}".format(pageId,row,key,rowNum));
        //         $(EleCss).html(rows[row][key]);
        //     }
        // }
        let updatedIndexs = [];
        //记录修改过的index
        if (notClearUpdated) {
            let updatedRows = $.data(dg[0], "datagrid").updatedRows;
            for (let i in updatedRows) {
                updatedIndexs.push(updatedRows[i].index);
            }
        }
        dg.datagrid("loadData", dg.datagrid("getData"));
        //恢复修改过的index
        if (notClearUpdated && updatedIndexs.length > 0) {
            let updatedRows = $.data(dg[0], "datagrid").updatedRows;
            let rows = dg.datagrid("getData").rows;
            for (let i in updatedIndexs) {
                updatedRows.push(rows[updatedIndexs[i]]);
            }
        }
    },

    //添加到已经修改的行中
    addToUpdatedRows: function (dgId, row) {
        let updatedRows = $.data($("#" + dgId)[0], "datagrid").updatedRows;
        let exists = false;
        //判断是已经否存在
        for (let i in updatedRows) {
            if (updatedRows[i].index == row.index) {
                exists = true;
                break;
            }
        }
        if (!exists) updatedRows.push(row); //添加为已经修改
    },
    // 获得单元格数据
    // id:页面id,比如PageDI
    // rowIndex:行号
    // columnName:列名
    getColumnVal: function (id, rowIndex, columnName) {
        return eval(id).dgData.rows[rowIndex][columnName];
    },
};